import { sys } from "cc"
import DateUtil from "./DateUtil"
import { Logger } from "./Logger"

export class ErrorCollection {


    public static instance: ErrorCollection = new ErrorCollection()

    public error_msg: string = ""
    public error_time: string = ""

    public error_map: Map<string, string> = new Map<string, string>()


    public initCollectError() {
        if (sys.isNative) {
            Logger.warn("window._errorHandler=====111===", window.onerror)

        
            window.onerror = (message, url, line, column, errorObj) => {
                let error_msg: string = message + " " + url + " " + line + "," + column
                Logger.warn("window.onerror=====message===", message)
                Logger.warn("window.onerror=====message===",typeof(message))
                Logger.warn("window.onerror=====url===", url)
                Logger.warn("window.onerror======line==", line)
                Logger.warn("window.onerror======column==", column)
                // Logger.warn("window.onerror======errorObj==", typeof (errorObj))
                // Logger.warn("window.onerror======errorObj=22=", errorObj)
                // Logger.warn("window.onerror======errorObj=33=", JSON.stringify(errorObj))
                // for (const key in errorObj) {
                //     if (Object.prototype.hasOwnProperty.call(errorObj, key)) {
                //         // const element = object[key];
                //         Logger.warn("window.onerror======errorObj=44=", key)
                //         Logger.warn("window.onerror======errorObj=55=", errorObj[key])

                //     }
                // }
                this.insertError(error_msg)
                // let exception = {}
                // exception["message"] = message;
                // exception["url"] = url;
                // exception["line"] = line;
                // exception["column"] = column;
                // exception["errorObj"] = errorObj;

            }

        
        }
        else if (sys.isBrowser) {
            window.onerror = (message, url, line, column, errorObj) => {
                let error_msg: string = message + " " + url + " " + line + "," + column
                // Logger.warn("window.onerror=====message===", message)
                // Logger.warn("window.onerror=====message===",typeof(message))
                // Logger.warn("window.onerror=====url===", url)
                // Logger.warn("window.onerror======line==", line)
                // Logger.warn("window.onerror======column==", column)
                // Logger.warn("window.onerror======errorObj==", typeof (errorObj))
                // Logger.warn("window.onerror======errorObj=22=", errorObj)
                // Logger.warn("window.onerror======errorObj=33=", JSON.stringify(errorObj))
                // for (const key in errorObj) {
                //     if (Object.prototype.hasOwnProperty.call(errorObj, key)) {
                //         // const element = object[key];
                //         Logger.warn("window.onerror======errorObj=44=", key)
                //         Logger.warn("window.onerror======errorObj=55=", errorObj[key])

                //     }
                // }
                this.insertError(error_msg)
                // let exception = {}
                // exception["message"] = message;
                // exception["url"] = url;
                // exception["line"] = line;
                // exception["column"] = column;
                // exception["errorObj"] = errorObj;

            }
        }
    }


    public insertError(error_msg: string) {
        if (!this.error_map.has(error_msg)) {
            let dateStr: string = DateUtil.formatDateStr(DateUtil.now())
            let error_info: string = dateStr + " " + error_msg
            this.error_map.set(error_msg, error_info)
            Logger.warn("insertError==", error_info)
        }
    }



}